Skip to content

什么是 Vite - 下一代前端构建工具

一、核心要点速览

💡 核心考点

  • Vite: 法语意为"快速",由 Vue 作者尤雨溪开发
  • 核心理念: 开发环境使用原生 ESM,生产环境使用 Rollup 打包
  • 关键特性: 极速冷启动、即时 HMR、按需编译

二、为什么需要 Vite

传统打包器的问题

Webpack 的问题:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
❌ 冷启动慢
  项目启动流程:
  1. 解析入口文件
  2. 递归分析所有依赖
  3. 构建完整的依赖图
  4. 打包成 bundle
  5. 启动开发服务器
  
  ❌ 大型项目可能需要 1-5 分钟

❌ HMR 延迟高
  修改文件后需要重新构建 bundle
  随着项目增大,HMR 变慢
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

Vite 的解决方案

Vite 的优势:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
✓ 利用原生 ESM
  现代浏览器支持 ES Modules
  <script type="module">
  ✓ 无需打包即可直接运行

✓ 按需编译
  只编译当前访问的页面
  ✓ 启动时间与项目大小无关

✓ 智能缓存
  依赖预构建并缓存
  ✓ 二次启动更快
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

三、工作原理

开发环境 vs 生产环境

┌──────────────────────────────────────────────────────────┐
│              Vite 工作原理                                │
└──────────────────────────────────────────────────────────┘

开发环境:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
1. 启动开发服务器 (~50ms)

2. 浏览器请求 index.html

3. 返回 HTML(含 script module)

4. 浏览器按需请求模块
   ├─ node_modules/* → esbuild 预构建
   └─ src/* → 按需编译

5. 浏览器渲染

✓ 启动时间与项目大小无关
✓ HMR < 100ms
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

生产环境:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
1. 执行 vite build

2. 使用 Rollup 打包

3. 代码分割 + 优化

4. 输出到 dist/

为什么用 Rollup?
✓ Tree Shaking 更彻底
✓ 生成的代码更简洁
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

四、核心特性

1. 基于 ESM 的开发服务器

javascript
// Vite 自动识别并处理各种模块格式

// ✓ 原生 ESM 导入
import { createApp } from 'vue'
import App from './App.vue'

// ✓ TypeScript 直接支持
import { sum } from './utils.ts'

// ✓ CSS 模块化
import styles from './App.module.scss'

// ✓ 动态导入(自动代码分割)
const Module = () => import('./heavy-module')

2. 即时热更新 (HMR)

HMR 性能对比:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
项目规模:1000+ 文件

Webpack HMR:  2-10 秒
Vite HMR:     < 100ms

性能提升:20-100 倍!
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

3. 开箱即用

Vite 内置支持:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
✓ TypeScript (.ts, .tsx)
✓ JSX/TSX (.jsx, .tsx)
✓ CSS 预处理器 (Sass, Less, Stylus)
✓ CSS Modules
✓ 静态资源 (图片、字体、视频)
✓ JSON 文件
✓ Web Assembly
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

五、快速开始

创建项目

bash
# 使用 pnpm(推荐)
pnpm create vite my-app --template vue

# 进入目录并安装依赖
cd my-app
pnpm install

# 启动开发服务器
pnpm dev

基础配置

javascript
// vite.config.js
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'

export default defineConfig({
  plugins: [vue()],
  server: {
    port: 3000,
    open: true
  },
  build: {
    outDir: 'dist'
  }
})

六、性能优势

启动速度对比

启动时间对比:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
小型项目(< 100 文件):
  Webpack:  8 秒
  Vite:     < 100ms
  提升:约 80 倍

中型项目(100-500 文件):
  Webpack:  15 秒
  Vite:     < 200ms
  提升:约 75 倍

大型项目(> 500 文件):
  Webpack:  30-60 秒
  Vite:     < 500ms
  提升:约 60-120 倍
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

七、面试标准回答

Vite 是下一代前端构建工具,由 Vue 作者尤雨溪开发,名字在法语中意为"快速"。它的核心理念是利用现代浏览器的原生 ESM 能力,实现极速的开发体验。

工作原理分为两个环境

开发环境:Vite 不进行打包,而是启动一个开发服务器,利用浏览器原生的 <script type="module"> 支持。浏览器按需请求模块,Vite 使用 esbuild 预构建依赖,源码则按需编译。这使得启动时间与项目大小无关,通常只需几十毫秒。

生产环境:Vite 使用 Rollup 进行打包,因为 Rollup 生成的代码更紧凑,Tree Shaking 更彻底。

主要优势

  1. 极速冷启动:启动时间 < 100ms,与项目大小无关
  2. 即时 HMR:热更新速度 < 100ms,比 Webpack 快 20-100 倍
  3. 开箱即用:内置 TypeScript、CSS 预处理器等支持
  4. 强大插件:兼容 Rollup 插件接口

适用场景:现代浏览器项目、Vue3/React 项目、追求开发效率的团队。对于需要支持 IE 的项目,可以使用 @vitejs/plugin-legacy 或继续使用 Webpack。


八、优缺点总结

优点 ✓:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
✓ 极速的开发体验(启动 < 100ms)
✓ 配置简单,开箱即用
✓ 更好的 TypeScript 支持
✓ 更小的体积(核心库仅 1KB)
✓ 强大的插件兼容性
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

缺点 ✗:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
✗ 浏览器兼容性要求高(需要支持原生 ESM)
✗ 生态不够成熟(插件数量较少)
✗ SSR 支持待完善
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

九、记忆口诀

Vite 歌诀:

Vite 名字意为快,
原生 ESM 是核心。
开发环境不打包,
按需加载真聪明。

esbuild 预构建,
Rollup 做生产。
启动只要百毫秒,
HMR 也飞快!

十、推荐资源


十一、总结一句话

Vite: 原生 ESM + esbuild + Rollup = 极速开发体验

最近更新